# 什么是闭包，一句话说就是，在函数中再嵌套一个函数，并且引用外部函数的变量，这就是一个闭包了
def outer(x):
    def inner(y):
        return x + y
    return inner

# print(outer(6)(5))

# 装饰器就是一个闭包，装饰器是闭包的一种应用
def log(func):
    # 闭包函数
    def f():
        func()
        print('log')
    return f # 返回闭包函数

@log
def func():
    print('处理业务')
    pass











class logging(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        print("[DEBUG]: enter {}()".format(self.func.__name__))
        return self.func(*args, **kwargs)

@logging
def hello(a, b, c):
    print(a, b, c)

if __name__ == '__main__':
    # func()
    hello(3,4,5)